|
|
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, есть две таблицы house и apartment. Сейчас у hosuse установлен первичный ключ и имя его - id. Нужно что бы этот id был общий для двух таблиц. К примеру, добавляю в таблицу house первую запись и назначается ей id = 0. Дальше еще одну, соответственно id уже = 1. А вот теперь добавляю запись в таблицу apartment и нужно чтобы ей присвоился id = 2. Как это организовать? Заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 00:33:13 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
Ошибся, начинается все с 1 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 00:39:35 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
bodpad, напрямую - никак. обходных путей есть несколько. но самое правильное - не делать этого вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 00:44:49 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
Т.е., если я правильно понял - нужен сквозной индекс с единой уникальной нумерацией для двух таблиц? Если так, то самое простое - создать функцию для получения очередного значения этого ключа: Код: sql 1. 2. 3. 4. Соответственно, при добавлении новой записи в одну из этих таблиц: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 04:49:29 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
OlegROA, OlegROA Код: sql 1. мда... за такое в приличном обществе бьют канделябрами (с) представьте себе такую ситуацию: записи в последнее время добавлялись только в таблицу1(Т1), т.е. ид записей там больше, чем в Т2 1)транзакция1 добавляет новую запись в Т2 и пока что не коммитится 2)транзакция2 добавляет запись в Т1 5)тр2 - коммит 6)тр1 - коммит Вопрос - какие (макс) ид будут в этих таблицах в результате такого стечения обстоятельств? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 05:50:17 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
tanglirзаписи в последнее время добавлялись только в таблицу1(Т1), т.е. ид записей там больше, чем в Т2Собственно, это необязательно, просто так, по-моему, проще представить происходящее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 05:51:39 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
bodpad, есть велосипедное решение ораклового сиквенса, но честно говоря лучше отказаться от такой затеи http://club.shelek.ru/viewart.php?id=320 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 11:53:55 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
tanglirмда... за такое в приличном обществе бьют канделябрами (с)Как была поставлена задача! Если разработчик делает такие вещи (сквозной счетчик для двух таблиц), то он, вероятно, должен себе представлять все "подводные камни"?! И если, после всего этого, он все равно останавливается на такой конфигурации, то, возможно, на это есть свои резоны. К примеру - с базой работает только одна рабочая станция и все происходит в одном сеансе без паралельных тредов. Более сложные варианты решения этой задачи, имхо, нет смысла рассматривать в рамках такой постановки задачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 17:35:08 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
OlegROAЕсли разработчик делает такие вещи (сквозной счетчик для двух таблиц), то он, вероятно, должен себе представлять все "подводные камни"?!Спасибо, посмешили. Вспомнились одни "розробоччеги", которые не просто не представляли себе подобные камни, нет, они ещё и заботливо раскладывали на эти камни толстый слой граблей :) OlegROAто, возможно, на это есть свои резоны. К примеру - с базой работает только одна рабочая станция и все происходит в одном сеансе без паралельных тредов.Боюсь, "резон" НСД в том, что когда разработчик придумывал такое решение, он и представить себе не мог (ну то есть не знал вообще), что с базой в принципе могут работать 2 и более пользователей одновременно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 18:41:42 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
А вообще единственное более-менее нормальное (имхо) решение, на инно, конечно - делать оба "пк" ссылками на третью таблицу, в которой будет одно автоинкрементное поле. По крайней мере грабельки с транзакциями уходят, но зато встаёт проблема с невозможностью прямых инсертов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 18:44:39 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
Так как дом и квартира, это по сути один объект "недвижимость" подумал: 'А че их разделять?!'. Вот и решил один pk для двух таблиц замутить. Оказалось все сложнее :). Делать так не буду. Всем спасибооооооо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2014, 00:34:26 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
bodpadТак как дом и квартира, это по сути один объект "недвижимость" подумал: 'А че их разделять?!'.Ну, если это один "объект" в понятиях прикладной задачи, то зачем их вообще разделять по разным таблицам? У них, насколько я понимаю, одинаковые параметры. Только дом, как общий случай квартиры, имеет некоторые дополнительные поля. Вот и делаете одну таблицу со всеми необходимыми полями и добавляете еще одно поле - тип объекта недвижимости. Во все ключи, кроме первичного по идентификатору, первым полем добавляете тип. Все - теперь из одной таблицы можно брать информацию по любому типу объекта. Такая схема даже подходит для случая, если дом необходимо более детально описывать по-квартирно - просто добавляете еще одно поле "Владелец". У всех домов и отдельных квартир это поле будет нулевым, а у квартир в составе дома в этом поле будет идентификатор дома. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2014, 02:03:01 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
OlegROA, ЯТД, ТС, говоря "дом", имел в виду "частный дом". Ставить знак равенства между многоквартирным домом и квартирой - это очччень смелое (мягко говоря) решение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2014, 05:31:44 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
tanglir, Ну почему? У многоквартирного дома, как объекта недвижимости, есть практически все те же характеристики, что и у квартиры или частного дома. Даже кол-во квартир в доме и кол-во этажей легко накладываются на кол-во комнат и этажей в квартире! Площадь нежилых/служебных помещений в доме тоже накладывается на нежилую площадь в квартире. Т.е., дополнительных параметров (по сравнению с квартирой) для многоквартирного дома не так уж и много - и большинство из них укладываются в обычные битовые флаги! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2014, 06:40:04 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
Я не сторонник пихать разные сущности в одну таблицу, пусть даже у них и будут похожие свойства. Но если вам это кажется удобным - да пожалуйста, каждый сам должен раскладывает себе грабли :) Если же у вас это одна сущность - возражений нет. Просто я с трудом представляю себе задачу, в которой бы многоквартирный дом можно было бы считать равнозначным отдельной квартире. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2014, 06:47:39 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
[off] вот что значит несколько раз править сообщение, а потом не перечитать его перед отправкой личный рекорд по косноязычию установлен :) [/off] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2014, 06:49:38 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
tanglirА вообще единственное более-менее нормальное (имхо) решение, на инно, конечно - делать оба "пк" ссылками на третью таблицу, в которой будет одно автоинкрементное поле. По крайней мере грабельки с транзакциями уходят, но зато встаёт проблема с невозможностью прямых инсертов. ИМХО, это единственно верное решение с т.з. РА, какой бы "инструмент" чего бы не предлагал другое. Поскольку 2 сущности или более должны иметь сквозную нумерацию, постольку они являются разновидностями (подмножествами) третьей, которая и обязана за этой нумерацией следить. За "другое решение" - НАДО бить канделябрами. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2014, 09:17:16 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
bodpadТак как дом и квартира, это по сути один объект "недвижимость" подумал: 'А че их разделять?!'. Вот и решил один pk для двух таблиц замутить Если так рассуждать, то все вокруг нас - объекты. Давайте все таблицы одной сквозной нумерацией нумеровать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2014, 12:50:28 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
Cane Cat FisherbodpadТак как дом и квартира, это по сути один объект "недвижимость" подумал: 'А че их разделять?!'. Вот и решил один pk для двух таблиц замутить Если так рассуждать, то все вокруг нас - объекты. Давайте все таблицы одной сквозной нумерацией нумеровать. проблема мапинга логических обьектов на релятивную базу -- старая и серьезная проблема -- есть несколько решений и ни один из них не является лучшим в отрыве от задачи. на пример IP6 или MAC-адресс -- фактически глобальная нумерация всех серверов, раутеров, телеофонов, холодильников, утуюгов, автомобильного узла связи и кучи других разнообразных предметов. Т.е для какой-то задачи они одинаковые, для других -- разные... Дом и квартира вполне себе одинаковый обьект для, например, посредника по недвижимости. Хранить их в одной или 30 разных таблицах -- вопрос к архитектору конкретного проекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2014, 18:54:11 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
Частный дом и квартиру помещать в одно таблицу это нерасширяемость 80lvl. Они имеют одинаковый свойства: цена, комнат, площадь. Но в тоже время у квартиры не может быть этажности, а у дома - номер подъезда. Отсюда сделал вывод, что таблиц нужно делать две. А идея про один pk для двух таблиц пришла сразу с мыслью, что это делается в два счета. Я думал если pk сделать сквозным для двух таблиц не вводя для них третью как ведущую я избавлюсь от запросов типа JOIN. Что было бы быстрее, ведь по полям будет делаться выборка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2014, 21:02:53 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
bodpadЧастный дом и квартиру помещать в одно таблицу это нерасширяемость 80lvl. Они имеют одинаковый свойства: цена, комнат, площадь. Но в тоже время у квартиры не может быть этажности, а у дома - номер подъезда. Отсюда сделал вывод, что таблиц нужно делать две. А идея про один pk для двух таблиц пришла сразу с мыслью, что это делается в два счета. Я думал если pk сделать сквозным для двух таблиц не вводя для них третью как ведущую я избавлюсь от запросов типа JOIN. Что было бы быстрее, ведь по полям будет делаться выборка Можно почитать литературу и посмотреть примеры. например: http://www.agiledata.org/essays/mappingObjects.html Возможны 3-4 варианта -- каждый имеет преимушества и недостатки. Можно и в одной таблице, можно и 3-мя... Категорическое решение может принять только человек с полным знанием задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2014, 23:02:55 |
|
||
|
Первичный ключ для двух таблиц
|
|||
|---|---|---|---|
|
#18+
Сделаю, потом пойму что ошибся, поругаю себя, и переделаю. И так циклом while. Короче у меня все как всегда. Вам всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2014, 23:22:19 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38520909&tid=1835425]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
26ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
1ms |
| others: | 262ms |
| total: | 411ms |

| 0 / 0 |
