Обрабатывать отношения базы данных на стороне сервера или в программе - PullRequest
0 голосов
/ 25 августа 2011

после нескольких дискуссий с коллегой у нас все еще нет такого значения в этой теме.

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

Преимущества на мой взгляд
- нет "неправильных" вставок из-за конфликтов отношений в базе данных
- База данных и программа строго разделены
- Несколько программ для одного и того же источника данных требуют меньше усилий для настройки
- Упрощение использования LINQ
- и многое другое ....?


Возможные недостатки этого способа?
Каковы преимущества не связанных таблиц?

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Транзакционные системы должны «всегда» обеспечивать соблюдение ссылочной целостности как можно ближе к базе данных.Большинство людей согласятся, что это лучше всего делать прямо в самой базе данных.Вы правильно поняли многие из преимуществ, позволяющих СУБД обеспечивать ссылочную целостность.

Я сказал «всегда» выше, потому что верю в здравый смысл и обдуманные решения, а не практические правила.

Одна из причин, по которой кто-то может не захотеть применять ссылочную целостность в базе данных, состоит в том, что у вас есть циклические отношения, когда родитель и ребенок должны указывать друг на друга, и невозможно вставить одну запись, потому чтодругого еще нет.Это оставляет вас с так называемым уловом-22.В этом случае вам может потребоваться обеспечить ссылочную целостность в логике программы.Тем не менее, лучшее место для этого - на уровне данных, а не на уровне приложений.

Еще одна причина, по которой некоторые люди не беспокоятся о ссылочной целостности, заключается в том, что данные доступны только для чтения.Это может произойти в базе данных отчетов или хранилище данных.Ссылочная целостность в базе данных создает индексы, которые используются для обеспечения взаимосвязей.Иногда это может быть проблема с пространством, но чаще всего это просто проблема увеличения нагрузки на хранилище данных из-за порядка требуемых операций.

Еще одна причина, по которой ссылочная целостность иногда не *Используется 1010 *, так как архивирование старых транзакционных данных может быть затруднено из-за сложных взаимосвязей между основными таблицами и таблицами транзакций.Вы можете легко оказаться в положении, когда невозможно удалить какие-либо данные, независимо от того, сколько им лет, потому что они каким-то образом связаны с чем-то, что связано с другой вещью, которая необходима чему-то текущему.

Сказав все это, вам определенно следует начать с позиции использования функций ссылочной целостности вашей базы данных и отступать от этого только в том случае, если у вас есть действительно хорошая, хорошо продуманная причина.

1 голос
/ 25 августа 2011

Конечно !!! Вы должны обеспечить ссылочную целостность в вашей модели базы данных! Безопаснее, эффективнее, гарантируется целостность данных, и вы не полагаетесь на программиста. Здесь нет обсуждения.
Несвязанные таблицы можно использовать ТОЛЬКО в том случае, если вы просто создаете «базу данных отчетов», которая загружает ночные данные из различных систем, например.

...