|
|
|
nHibernate рекомендация по неиспользованию композитных ключей
|
|||
|---|---|---|---|
|
#18+
где то прочитал про то что не рекомендуется использовать композитные ключи в качестве PK. и рекомендуется использовать суррогатные, например теже identity. В частности чтобы легко юзать SaveOrUpdate. Тогда как успешно изменить существующую структуру базы данных, вот пример: Таблица Бригады ----------------- Дата Смены (pk) Номер Смены (pk) Номер Бригады Таблица Пробы ---------------- Дата смены (pk, fk) Номер смены (pk, fk) Время пробы (pk) Результат Начал делать так: Таблица Бригады =============== ID Бригады (pk, identity) Дата смены Номер смены Номер бригады Таблица Пробы =============== ID пробы (а здесь как это тоже что ли identity???) ID бригады (fk) Результат И вопрос по таблице Бригады. теперь туда нужно добавлять что ли уникальный индекс на поля Дата смены + Номер смены ???? Короче как граммотно изменить структуру чтобы наслаждаться кибернейтом. Короче помогите комрады. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 14:38 |
|
||
|
nHibernate рекомендация по неиспользованию композитных ключей
|
|||
|---|---|---|---|
|
#18+
Толком вникнуть не удалось, но, похоже, у вас там проблемы какие-то со структурой в принципе. А чтобы использовать NH -- то да, добавьте во все таблицы с бинзнес-сущностями Identity. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 16:36 |
|
||
|
nHibernate рекомендация по неиспользованию композитных ключей
|
|||
|---|---|---|---|
|
#18+
Хорошо я добавлю везде identity но как тогда быть с целостностью БД Обратите внимание на таблицу "Бригады". раньше уникальность комбинации полей Дата смены и Номер смены. поддерживалась первичным ключем (pk). После того как я добавляю identity в эту таблицу. первичный ключ теперь поле ID. и теперь я вставлять в таблицу одинаковые бригады. Пример иллюстрирующий: Вариант до nHibernate. В таблице Бригады: Дата смены (pk) Номер смены (pk) Бригада 10.07.07 1 1 10.07.07 2 2 Вставить повторно запись: "10.07.07", "1", "1" не получится будет исключение. Послен nHibernate, таблица Бригады: ID (pk) Дата смены Номер смены Бригада 1 10.07.07 1 1 2 10.07.07 2 2 Так как индекс теперь по ID. я легко могу добавить повторно запись: "10.07.07", "1", "1". нарушив тем самым бд. Дак вот вопрос: Как пользователи nHibernate борятся с подобными проблемами, неужели просто добавляют еще один индекс по полям: Номер смены + Бригады и делают его уникальным. ???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2007, 06:55 |
|
||
|
nHibernate рекомендация по неиспользованию композитных ключей
|
|||
|---|---|---|---|
|
#18+
ivankinДак вот вопрос: Как пользователи nHibernate борятся с подобными проблемами, неужели просто добавляют еще один индекс по полям: Номер смены + Бригады и делают его уникальным. ???? NH тут вообще ни при чем. Да, добавляете уникальный индекс и БД сама следит за целостностью. Я повторяю -- у вас со структурой проблемы, так что вылечите сначала эту часть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2007, 10:45 |
|
||
|
nHibernate рекомендация по неиспользованию композитных ключей
|
|||
|---|---|---|---|
|
#18+
>Да, добавляете уникальный индекс и БД сама следит за целостностью. я так и делаю, но почему то думал что кто то рулит по другому. т.е. получается что к любой Detail таблице будет индекс с pk, и уникальный индекс по другим полям . на структуру не пеняйте т.к. я ее выдумал. пример не удачно надо сказать получился согласен. Давайте возьмем пример из БД Nortwind: Таблица Master: Orders ======= orderID (pk) OrderDate ShipName и.т.д..... Таблица Detail: OrderDetails ======= orderID (pk, fk) productID(pk, fk) unitprice и.т.д..... Правильно ли я понял что для комфортного использования nHibernbate нужно изменить OrderDetails следующим образом: OrderDetails (for Nhibernate) ========= orderDetailsID (pk, idenity) orderID (fk) productID (fk) unitprice и.т.д. и в этой табличке добавить уникальный индекс по столбцам orderID + productID, которые раньше были входили в pk. Правильно ли я понял? Как бы сделали вы Нахлобуч? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2007, 14:54 |
|
||
|
nHibernate рекомендация по неиспользованию композитных ключей
|
|||
|---|---|---|---|
|
#18+
ivankin Правильно ли я понял что для комфортного использования nHibernbate нужно изменить OrderDetails следующим образом: Код: plaintext 1. 2. 3. 4. 5. 6. и в этой табличке добавить уникальный индекс по столбцам orderID + productID, которые раньше были входили в pk. Правильно ли я понял? Можно и так. Еще можно прочитать главу 7.2 из NHibernate Reference -- про Collections of dependent objects ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2007, 15:06 |
|
||
|
|

start [/forum/topic.php?fid=17&fpage=93&tid=1352698]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 375ms |

| 0 / 0 |
