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

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

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

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

напрямую - никак.
обходных путей есть несколько.
но самое правильное - не делать этого вообще.
...
Рейтинг: 0 / 0
Первичный ключ для двух таблиц
    #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
Первичный ключ для двух таблиц
    #38520133
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegROA,


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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