2015-06-03 3 views
1

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

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

Пример:

Name | Status | Date 
--------+-----------+------------------ 
name1 | N/A  | April 
name2 | N/A  | April 
name1 | Open | May 
name2 | N/A  | May 
name1 | closed | June 
name1 | open | July 
+0

Я не вижу каких-либо очевидных проблем, есть конкретный сценарий, который вы не знаете? – Newd

+0

@Newd У меня более тысячи имен, и если я создаю новую строку записи для каждого имени, что означает 3 раза записи. Я не уверен, что это лучший способ сделать это ... Я имею в виду с точки зрения нормализации – natali

ответ

0

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

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

Это сократило бы количество записей на 2/3rds, но снова. Я думаю, что это скорее вопрос.

+0

из вашего решения. Я получаю следующее: создание поля данных для каждого состояния и включение даты, когда статус вступил в силу ... спасибо, – natali

+0

Я бы работал, поэтому в основном вместо того, чтобы иметь флажок, у вас есть только поля даты. Затем вы можете использовать эти поля даты, что означает, что наличие даты эффективно сообщит вам, что такое текущий статус. Хотя я бы просто опасался, что в будущем вы будете создавать больше работы для себя в отношении запросов. Вместо 'WHERE StatusA = True' вам нужно будет работать с ним так, как' WHERE IIF (DateA <> Null, 1, 0) = 1'. Это очень грубый непроверенный код, но вы получаете эту идею. – Newd

+0

спасибо, я буду следовать вашим советам :) – natali

1

С нормированной точки зрения вам нужно 4 таблицы всего
первый стол Стол мастер

Name | Status | Date (month ?) 
--------+-----------+-------- 
1  | 1  | 4 
2  | 3  | 5 

второй стол Стол имена

ID  | Names 
--------+----------- 
1  | name1 
2  | name2 

третьей таблицы статус таблицы

ID  | Status 
    --------+----------- 
    1  | N/A 
    2  | Open 
    3  | closed 

4-й стол месяца

ID  | Month 
--------+----------- 
1  | January 
2  | February 
........|............ 
12  | December 
Смежные вопросы