Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Первичный ключ для двух таблиц / 23 сообщений из 23, страница 1 из 1
09.01.2014, 00:33:13
    #38520010
bodpad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
Здравствуйте, есть две таблицы house и apartment. Сейчас у hosuse установлен первичный ключ и имя его - id.
Нужно что бы этот id был общий для двух таблиц.

К примеру, добавляю в таблицу house первую запись и назначается ей id = 0. Дальше еще одну, соответственно id уже = 1.
А вот теперь добавляю запись в таблицу apartment и нужно чтобы ей присвоился id = 2.

Как это организовать?

Заранее спасибо
...
Рейтинг: 0 / 0
09.01.2014, 00:39:35
    #38520014
bodpad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
Ошибся, начинается все с 1 :)
...
Рейтинг: 0 / 0
09.01.2014, 00:44:49
    #38520018
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
bodpad,

напрямую - никак.
обходных путей есть несколько.
но самое правильное - не делать этого вообще.
...
Рейтинг: 0 / 0
09.01.2014, 04:49:29
    #38520124
OlegROA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
Т.е., если я правильно понял - нужен сквозной индекс с единой уникальной нумерацией для двух таблиц?
Если так, то самое простое - создать функцию для получения очередного значения этого ключа:
Код: sql
1.
2.
3.
4.
DECLARE MaxId1, MaxId2 INT DEFAULT 0;
SELECT MAX(id) INTO MaxId1 FROM Table1;
SELECT MAX(id) INTO MaxId2 FROM Table2;
RETURN IF(MaxId1 > MaxId2,MaxId1+1,MaxId2+1);


Соответственно, при добавлении новой записи в одну из этих таблиц:
Код: sql
1.
INSERT INTO Table (Id,...) VALUES(fn_GetNewId(),...)
...
Рейтинг: 0 / 0
09.01.2014, 05:50:17
    #38520133
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
OlegROA,


OlegROA
Код: sql
1.
MAX(id)

мда... за такое в приличном обществе бьют канделябрами (с)

представьте себе такую ситуацию: записи в последнее время добавлялись только в таблицу1(Т1), т.е. ид записей там больше, чем в Т2
1)транзакция1 добавляет новую запись в Т2 и пока что не коммитится
2)транзакция2 добавляет запись в Т1
5)тр2 - коммит
6)тр1 - коммит
Вопрос - какие (макс) ид будут в этих таблицах в результате такого стечения обстоятельств?
...
Рейтинг: 0 / 0
09.01.2014, 05:51:39
    #38520134
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
tanglirзаписи в последнее время добавлялись только в таблицу1(Т1), т.е. ид записей там больше, чем в Т2Собственно, это необязательно, просто так, по-моему, проще представить происходящее.
...
Рейтинг: 0 / 0
09.01.2014, 11:53:55
    #38520317
artas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
bodpad,

есть велосипедное решение ораклового сиквенса, но честно говоря лучше отказаться от такой затеи

http://club.shelek.ru/viewart.php?id=320
...
Рейтинг: 0 / 0
09.01.2014, 17:35:08
    #38520828
OlegROA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
tanglirмда... за такое в приличном обществе бьют канделябрами (с)Как была поставлена задача!
Если разработчик делает такие вещи (сквозной счетчик для двух таблиц), то он, вероятно, должен себе представлять все "подводные камни"?! И если, после всего этого, он все равно останавливается на такой конфигурации, то, возможно, на это есть свои резоны. К примеру - с базой работает только одна рабочая станция и все происходит в одном сеансе без паралельных тредов.

Более сложные варианты решения этой задачи, имхо, нет смысла рассматривать в рамках такой постановки задачи!
...
Рейтинг: 0 / 0
09.01.2014, 18:41:42
    #38520909
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
OlegROAЕсли разработчик делает такие вещи (сквозной счетчик для двух таблиц), то он, вероятно, должен себе представлять все "подводные камни"?!Спасибо, посмешили. Вспомнились одни "розробоччеги", которые не просто не представляли себе подобные камни, нет, они ещё и заботливо раскладывали на эти камни толстый слой граблей :)
OlegROAто, возможно, на это есть свои резоны. К примеру - с базой работает только одна рабочая станция и все происходит в одном сеансе без паралельных тредов.Боюсь, "резон" НСД в том, что когда разработчик придумывал такое решение, он и представить себе не мог (ну то есть не знал вообще), что с базой в принципе могут работать 2 и более пользователей одновременно.
...
Рейтинг: 0 / 0
09.01.2014, 18:44:39
    #38520915
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
А вообще единственное более-менее нормальное (имхо) решение, на инно, конечно - делать оба "пк" ссылками на третью таблицу, в которой будет одно автоинкрементное поле. По крайней мере грабельки с транзакциями уходят, но зато встаёт проблема с невозможностью прямых инсертов.
...
Рейтинг: 0 / 0
10.01.2014, 00:34:26
    #38521159
bodpad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
Так как дом и квартира, это по сути один объект "недвижимость" подумал: 'А че их разделять?!'. Вот и решил один pk для двух таблиц замутить. Оказалось все сложнее :). Делать так не буду. Всем спасибооооооо
...
Рейтинг: 0 / 0
10.01.2014, 02:03:01
    #38521180
OlegROA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
bodpadТак как дом и квартира, это по сути один объект "недвижимость" подумал: 'А че их разделять?!'.Ну, если это один "объект" в понятиях прикладной задачи, то зачем их вообще разделять по разным таблицам? У них, насколько я понимаю, одинаковые параметры. Только дом, как общий случай квартиры, имеет некоторые дополнительные поля. Вот и делаете одну таблицу со всеми необходимыми полями и добавляете еще одно поле - тип объекта недвижимости. Во все ключи, кроме первичного по идентификатору, первым полем добавляете тип. Все - теперь из одной таблицы можно брать информацию по любому типу объекта.
Такая схема даже подходит для случая, если дом необходимо более детально описывать по-квартирно - просто добавляете еще одно поле "Владелец". У всех домов и отдельных квартир это поле будет нулевым, а у квартир в составе дома в этом поле будет идентификатор дома.
...
Рейтинг: 0 / 0
10.01.2014, 05:31:44
    #38521230
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
OlegROA,

ЯТД, ТС, говоря "дом", имел в виду "частный дом".

Ставить знак равенства между многоквартирным домом и квартирой - это очччень смелое (мягко говоря) решение
...
Рейтинг: 0 / 0
10.01.2014, 06:40:04
    #38521234
OlegROA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
tanglir,
Ну почему?
У многоквартирного дома, как объекта недвижимости, есть практически все те же характеристики, что и у квартиры или частного дома. Даже кол-во квартир в доме и кол-во этажей легко накладываются на кол-во комнат и этажей в квартире!
Площадь нежилых/служебных помещений в доме тоже накладывается на нежилую площадь в квартире.
Т.е., дополнительных параметров (по сравнению с квартирой) для многоквартирного дома не так уж и много - и большинство из них укладываются в обычные битовые флаги!
...
Рейтинг: 0 / 0
10.01.2014, 06:47:39
    #38521237
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
Я не сторонник пихать разные сущности в одну таблицу, пусть даже у них и будут похожие свойства. Но если вам это кажется удобным - да пожалуйста, каждый сам должен раскладывает себе грабли :)
Если же у вас это одна сущность - возражений нет. Просто я с трудом представляю себе задачу, в которой бы многоквартирный дом можно было бы считать равнозначным отдельной квартире.
...
Рейтинг: 0 / 0
10.01.2014, 06:49:38
    #38521238
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
[off]
вот что значит несколько раз править сообщение, а потом не перечитать его перед отправкой
личный рекорд по косноязычию установлен :)
[/off]
...
Рейтинг: 0 / 0
10.01.2014, 09:17:16
    #38521315
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
tanglirА вообще единственное более-менее нормальное (имхо) решение, на инно, конечно - делать оба "пк" ссылками на третью таблицу, в которой будет одно автоинкрементное поле. По крайней мере грабельки с транзакциями уходят, но зато встаёт проблема с невозможностью прямых инсертов.

ИМХО, это единственно верное решение с т.з. РА, какой бы "инструмент" чего бы не предлагал другое. Поскольку 2 сущности или более должны иметь сквозную нумерацию, постольку они являются разновидностями (подмножествами) третьей, которая и обязана за этой нумерацией следить.

За "другое решение" - НАДО бить канделябрами. :)
...
Рейтинг: 0 / 0
10.01.2014, 12:50:28
    #38521769
Cane Cat Fisher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
bodpadТак как дом и квартира, это по сути один объект "недвижимость" подумал: 'А че их разделять?!'. Вот и решил один pk для двух таблиц замутить

Если так рассуждать, то все вокруг нас - объекты. Давайте все таблицы одной сквозной нумерацией нумеровать.
...
Рейтинг: 0 / 0
10.01.2014, 18:54:11
    #38522420
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
Cane Cat FisherbodpadТак как дом и квартира, это по сути один объект "недвижимость" подумал: 'А че их разделять?!'. Вот и решил один pk для двух таблиц замутить

Если так рассуждать, то все вокруг нас - объекты. Давайте все таблицы одной сквозной нумерацией нумеровать.

проблема мапинга логических обьектов на релятивную базу --
старая и серьезная проблема -- есть несколько решений
и ни один из них не является лучшим в отрыве от задачи.

на пример IP6 или MAC-адресс -- фактически
глобальная нумерация всех серверов, раутеров, телеофонов,
холодильников, утуюгов, автомобильного узла связи
и кучи других разнообразных предметов.
Т.е для какой-то задачи они одинаковые, для
других -- разные...

Дом и квартира вполне себе одинаковый обьект
для, например, посредника по недвижимости.
Хранить их в одной или 30 разных таблицах --
вопрос к архитектору конкретного проекта.
...
Рейтинг: 0 / 0
10.01.2014, 21:02:53
    #38522554
bodpad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
Частный дом и квартиру помещать в одно таблицу это нерасширяемость 80lvl. Они имеют одинаковый свойства: цена, комнат, площадь. Но в тоже время у квартиры не может быть этажности, а у дома - номер подъезда.

Отсюда сделал вывод, что таблиц нужно делать две. А идея про один pk для двух таблиц пришла сразу с мыслью, что это делается в два счета.

Я думал если pk сделать сквозным для двух таблиц не вводя для них третью как ведущую я избавлюсь от запросов типа JOIN. Что было бы быстрее, ведь по полям будет делаться выборка
...
Рейтинг: 0 / 0
10.01.2014, 23:02:55
    #38522643
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
bodpadЧастный дом и квартиру помещать в одно таблицу это нерасширяемость 80lvl. Они имеют одинаковый свойства: цена, комнат, площадь. Но в тоже время у квартиры не может быть этажности, а у дома - номер подъезда.

Отсюда сделал вывод, что таблиц нужно делать две. А идея про один pk для двух таблиц пришла сразу с мыслью, что это делается в два счета.

Я думал если pk сделать сквозным для двух таблиц не вводя для них третью как ведущую я избавлюсь от запросов типа JOIN. Что было бы быстрее, ведь по полям будет делаться выборка

Можно почитать литературу и посмотреть примеры.
например:
http://www.agiledata.org/essays/mappingObjects.html

Возможны 3-4 варианта -- каждый имеет
преимушества и недостатки. Можно и в одной таблице, можно и
3-мя... Категорическое решение может
принять только человек с полным знанием задачи.
...
Рейтинг: 0 / 0
10.01.2014, 23:22:19
    #38522653
bodpad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
Сделаю, потом пойму что ошибся, поругаю себя, и переделаю. И так циклом while.
Короче у меня все как всегда.

Вам всем спасибо.
...
Рейтинг: 0 / 0
10.01.2014, 23:24:41
    #38522655
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный ключ для двух таблиц
bodpadСделаю, потом пойму что ошибся, поругаю себя, и переделаю. И так циклом while.
Короче у меня все как всегда.

Вам всем спасибо.

Успехов!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Первичный ключ для двух таблиц / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]