2016-12-16 2 views
0

Я пытаюсь выбрать один из двух вариантов для моих табличных проектов.Реляционная база данных - лучший вариант при разработке полей

В двух таблицах «CLASS» и «SECTION», перечисленных ниже, для каждой комбинации «YEAR-CLIENT_ID-CLS_SEQ» в таблице «CLASS» в таблице «SECTION» будет одна или несколько записей.

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

Информация: Обе таблицы CLASS и СЕКЦИЯ являются основными данными, то есть, настройка выполняется вручную, и никакие программные обновления не выполняются. Существуют другие дочерние таблицы транзакций, в которых используются CLS_SEQ и SEC_SEQ; и все таблицы транзакций также имеют столбцы YEAR и CLENT_ID.

Вопрос: Что касается дизайна таблицы, какой вариант лучше для CLS_SEQ и SEC_SEQ?

Поскольку это основная настройка данных, я предпочитаю вариант 1, поскольку он обеспечивает ясность данных и упрощает их обслуживание год за годом. Также в Варианте 1 данные в дальнейших таблицах транзакций также можно получить, передав YEAR и CLIENT_ID (которые всегда доступны в приложении) вместе с CLS_SEQ и/или SEC_SEQ.

Вопрос в том, будет ли это иметь какое-либо существенное влияние на производительность при извлечении данных & в соединениях с использованием варианта 1? Поскольку всякий раз, когда мне нужно вытаскивать «некоторые данные» из таблиц CLASS или SECTION, используя соединение из любой из таблицы child/transaction, мне всегда нужно использовать поля YEAR и CLIENT_ID.

Также обратите внимание, что только за последние 4 года записи будут храниться во всех основных и транзакционных таблицах, а остальные будут заархивированы.

ответ

0

Я хотел бы предложить, чтобы пойти на вариант 1.

Глядя на наборе данных (и тот факт, что вы будете продуть после 4-х лет), он не выглядит как его будет иметь количество записей, которые будут действительно влияют на производительность. Кроме того, если производительность является проблемой, есть другие варианты (настройка запросов, определение индексов и т. Д.), Которые можно сделать, прежде чем беспокоиться о том, как структурировать данные.

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

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

По моему мнению, это не стоит проблем. БД достаточно быстры, чтобы обрабатывать одно соединение. Его не стоит усложнять ваш код.

+0

Спасибо и оцените ваше время на этом. Не могли бы вы подробнее рассказать о «необходимости поддерживать дополнительный ключ в вашей памяти». Я уже реализовал Option-2 уже, но не чувствую себя комфортно с этим. В таблицах CLASS и SECTION я ожидаю, что количество записей будет работать в 1000 (максимум 10000), но другие таблицы транзакций могут иметь миллион записей. Тем не менее, я тоже считаю, что вариант-1 был бы лучше, поскольку эти таблицы поддерживаются вручную, это может быть кошмар с Option-2. – user5281896

+0

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

+0

Еще раз спасибо. Другие дочерние таблицы похожи на «Экзамен», «Марк» и т. Д., Где CLS_SEQ (OR) SEC_SEQ будет внешним ключом. Все необходимые поля ввода, Year, Client_id, Cls_seq/Sec_seq всегда будут доступны в качестве входных данных для чтения/объединения таблиц. – user5281896

 Смежные вопросы

  • Нет связанных вопросов^_^