|
|
|
Правильно реализовать уникальность
|
|||
|---|---|---|---|
|
#18+
Есть 3 таблицы, последовательно связанные друг с другом. Table1->Table2->Table3. Table1company_idcompany_name Table2company_idoffice_id Table3office_iddeal_num company_id, company_id - автоинкремент deal_num - строка Надо, чтобы записи таблицы 3 были уникальны в рамках company_id. Как правильно поддерживать эту уникальность? Добавить в таблицу 3 поле company_id и создать уникальный ключ company_id, deal_num или же это будет избыточно и есть более правильный способ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 15:11 |
|
||
|
Правильно реализовать уникальность
|
|||
|---|---|---|---|
|
#18+
Попробуйте применить триггеры. зы: корявая структура ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 15:14 |
|
||
|
Правильно реализовать уникальность
|
|||
|---|---|---|---|
|
#18+
E-hauler, поправлю office_id - автоинкремент ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 15:14 |
|
||
|
Правильно реализовать уникальность
|
|||
|---|---|---|---|
|
#18+
LSV, какую структуру посоветуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 15:15 |
|
||
|
Правильно реализовать уникальность
|
|||
|---|---|---|---|
|
#18+
table1 (company_id primary key...); table2(company_id references table1, office_id ... primary key (company_id, office_id)...); table3(company_id, office_id, foreign key (company_id, office_id) references table2, deal_num ... unuque (company_id, deal_num)...); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 15:19 |
|
||
|
Правильно реализовать уникальность
|
|||
|---|---|---|---|
|
#18+
mcureenab, Это тот вариант, о котором я говорил. company_id будет и в table2 и в table3 - это вроде как "ненормально" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 15:34 |
|
||
|
Правильно реализовать уникальность
|
|||
|---|---|---|---|
|
#18+
E-haulerНадо, чтобы записи таблицы 3 были уникальны в рамках company_id. Если я правильно понял структуру данных, то это развязка многие ко многим между company и office. Если так, то поле deal_num и ограничение на него представляются довольно странными, но делается только триггерами/хранимками и в общем плохо. Если же многие ко многим тут не предусматривается, то надо просто убрать лишнюю таблицу, и всё станет легко и просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 16:30 |
|
||
|
Правильно реализовать уникальность
|
|||
|---|---|---|---|
|
#18+
softwarer, У company и office связь один ко многим, но я не представляю как тут убрать лишнюю таблицу. Есть список компаний. Каждой компании соответствует список оффисов. Каждому оффису - список сделок. У каждой сделки свой чиферно-буквенный уникальный идентификатор. Какая именно из таблиц лишняя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 16:35 |
|
||
|
Правильно реализовать уникальность
|
|||
|---|---|---|---|
|
#18+
E-hauler, авторНадо, чтобы записи таблицы 3 были уникальны в рамках company_id А вот я эту фразу почему-то не понял. Что является первичным ключом в таблице сделок? И почему сделки должны быть уникальны в рамках компании, а не офиса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 17:03 |
|
||
|
Правильно реализовать уникальность
|
|||
|---|---|---|---|
|
#18+
E-haulerКаждому оффису - список сделок. Ага, понял. Тогда так: если пытаться решить задачу сегодняшним днём, то нужно делать сделку развязкой между офисом и компанией, то есть "структура с дублированием". Но с практической точки зрения стоит иметь в виду, что правила нумерации документов относятся к часто и непредсказуемо меняющейся части бизнес-логики, скажем, сугубо для примера, через несколько месяцев может появиться требование стартовать нумерацию с каждого года заново. Поэтому закладывать ограничение в структуру таблиц неоправданно. Вместо этого нужна хранимка вроде "создай очередной номер" или в крайнем случае "проверь введённый пользователем номер". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 17:12 |
|
||
|
Правильно реализовать уникальность
|
|||
|---|---|---|---|
|
#18+
E-haulermcureenab, Это тот вариант, о котором я говорил. company_id будет и в table2 и в table3 - это вроде как "ненормально" "ненормально" только потому, что "office_id - автоинкремент", а так - просто составной PK. Ограничения целостности не позволят создать неоднозначные или неполные данные. С триггером можно так поступить. создаём индексную таблицу: table4 (company_id, deal_num, primary key (company_id, deal_num)); и триггер на Table3. тоторый по старому/новому office_id находит из Table2 company_id и удаляет старый и/или добавляет новый ключ в table4. Ещё так. Table3 (company_id, deal_num, primary key (company_id, deal_num), office_id, foreign key (company_id, office_id) references table2); Т.е. сделки регистрируются в рамках компании, а офис - доп. атрибут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 17:13 |
|
||
|
Правильно реализовать уникальность
|
|||
|---|---|---|---|
|
#18+
E-haulersoftwarer, У company и office связь один ко многим, но я не представляю как тут убрать лишнюю таблицу. Есть список компаний. Каждой компании соответствует список оффисов. Каждому оффису - список сделок. У каждой сделки свой чиферно-буквенный уникальный идентификатор. Какая именно из таблиц лишняя?В таком случае полю compzny_id в таблице Table3 самое место. Это ведь компаия заключает сделки, а не офис , я правильно понял? Таким образом Добавить в таблицу 3 поле company_id и создать уникальный ключ company_id, deal_num и есть искомое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 17:14 |
|
||
|
Правильно реализовать уникальность
|
|||
|---|---|---|---|
|
#18+
andy.sА вот я эту фразу почему-то не понял. Что является первичным ключом в таблице сделок? И почему сделки должны быть уникальны в рамках компании, а не офиса? В этом то и вопрос. Что сделать первичным ключем? Если бы была сделка, но не было офиса, то первичным ключем был бы company_id, deal_num. Сделки в рамках компании должны быть уникальны потому, что таковы бизнес требования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 17:19 |
|
||
|
Правильно реализовать уникальность
|
|||
|---|---|---|---|
|
#18+
E-hauler, значит первичный учёт сделок должен всетись в разрезе компании, а офис - дополнительный атрибут сделки, который впрочем может входить в альтернативный ключ, в силу уникальности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 17:30 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37091371&tid=1542336]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
444ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 752ms |

| 0 / 0 |
