powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / nHibernate рекомендация по неиспользованию композитных ключей
6 сообщений из 6, страница 1 из 1
nHibernate рекомендация по неиспользованию композитных ключей
    #34661300
ivankin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
где то прочитал про то что не рекомендуется использовать композитные ключи в качестве PK. и рекомендуется использовать суррогатные, например теже identity. В частности чтобы легко юзать SaveOrUpdate.

Тогда как успешно изменить существующую структуру базы данных, вот пример:

Таблица Бригады
-----------------
Дата Смены (pk)
Номер Смены (pk)
Номер Бригады


Таблица Пробы
----------------
Дата смены (pk, fk)
Номер смены (pk, fk)
Время пробы (pk)
Результат


Начал делать так:

Таблица Бригады
===============
ID Бригады (pk, identity)
Дата смены
Номер смены
Номер бригады

Таблица Пробы
===============
ID пробы (а здесь как это тоже что ли identity???)
ID бригады (fk)
Результат

И вопрос по таблице Бригады. теперь туда нужно добавлять что ли уникальный индекс на поля Дата смены + Номер смены ????

Короче как граммотно изменить структуру чтобы наслаждаться кибернейтом.

Короче помогите комрады.
...
Рейтинг: 0 / 0
nHibernate рекомендация по неиспользованию композитных ключей
    #34661873
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Толком вникнуть не удалось, но, похоже, у вас там проблемы какие-то со структурой в принципе.

А чтобы использовать NH -- то да, добавьте во все таблицы с бинзнес-сущностями Identity.
...
Рейтинг: 0 / 0
nHibernate рекомендация по неиспользованию композитных ключей
    #34662766
ivankin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо я добавлю везде 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 борятся с подобными проблемами, неужели просто добавляют еще один индекс по полям: Номер смены + Бригады и делают его уникальным. ????
...
Рейтинг: 0 / 0
nHibernate рекомендация по неиспользованию композитных ключей
    #34663194
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivankinДак вот вопрос: Как пользователи nHibernate борятся с подобными проблемами, неужели просто добавляют еще один индекс по полям: Номер смены + Бригады и делают его уникальным.
????

NH тут вообще ни при чем. Да, добавляете уникальный индекс и БД сама следит за целостностью.

Я повторяю -- у вас со структурой проблемы, так что вылечите сначала эту часть.
...
Рейтинг: 0 / 0
nHibernate рекомендация по неиспользованию композитных ключей
    #34664352
ivankin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Да, добавляете уникальный индекс и БД сама следит за целостностью.
я так и делаю, но почему то думал что кто то рулит по другому. т.е. получается что к любой 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. Правильно ли я понял?

Как бы сделали вы Нахлобуч?
...
Рейтинг: 0 / 0
nHibernate рекомендация по неиспользованию композитных ключей
    #34664395
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivankin
Правильно ли я понял что для комфортного использования nHibernbate нужно изменить OrderDetails следующим образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
OrderDetails (for Nhibernate)
=========
orderDetailsID (pk, idenity)
orderID (fk)
productID (fk)
unitprice
и.т.д.

и в этой табличке добавить уникальный индекс по столбцам orderID + productID, которые раньше были входили в pk. Правильно ли я понял?

Можно и так. Еще можно прочитать главу 7.2 из NHibernate Reference -- про Collections of dependent objects
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / nHibernate рекомендация по неиспользованию композитных ключей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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