Я почув деякий час жарт:
Q Як базовий кодер рахує 10? 1,2,3,4,5,6,7,8,9,10
Q Як C-кодер рахується до 10?
А 0,1,2,3,4,5,6,7,8,9
Q Як рахується DBA до 10?
А 0,1, багато
Правда цього жарту полягає в тому, що раз у вас є дві (або більше) однієї і тієї ж речі в структурі бази даних (стовпці або таблиці), ви робите це неправильно.
Схема, яка виглядає так:
+----------+
| id |
| name |
| phone1 |
| phone2 |
| |
+----------+
Це неправильно, тому що куди ви поставите третій номер телефону, якщо хтось має його?
Те саме стосується самих таблиць. Також погана річ - це зміна схеми під час виконання, на що, мабуть, має на увазі "нова таблиця для кожного списку". (Пов'язано: MVC4: Як створити модель під час виконання? )
Таким чином, рішення полягає у створенні списку todo, який складається з двох таблиць. У вас є дві речі - списки та предмети.
Отже, давайте складемо структуру таблиці, яка відображає це:
+----------+ +-------------+
| List | | Task |
+----------+ +-------------+
| id (pk) <---+ | id (pk) |
| name | +---+ listid (fk) |
| | | desc |
| | | |
+----------+ +-------------+
У списку є ідентифікатор (первинний ключ для списку) та ім’я. У завданні є ідентифікатор (первинний ключ), листd (зовнішній ключ) та опис завдання. Зовнішній ключ відноситься до первинного ключа іншої таблиці.
Я зазначу, що це не починає охоплювати всі можливості різних вимог до програмного забезпечення та структури таблиці для його підтримки. Завершено, термін, повторення тощо ... це все додаткові структури, які, ймовірно, потрібно враховувати при розробці таблиці. Однак, якщо структура таблиці не буде належним чином нормалізована (або реалізуються компроміси, які ви зробили, тому що вона не нормалізується), пізніше у вас буде багато головних болів.
Тепер все, що стосується написання цього як реляційної бази даних. Але це не єдиний тип баз даних там. Якщо ви вважаєте список документом, то в базі даних noql, стилізованих до документа, також може бути запропонований підхід, який не є помилковим.
Поки я не збираюсь занадто довго заглиблюватися в нього, там є численні підручники для списків тодо на дивані. Одним із таких, які придумали пошук, є проста програма із списком завдань у CouchDB . Ще один показ у вікі couchdb: Пропонована схема списків справ .
У підході, придатному для дивана, кожен список є документом JSON, що зберігається в базі даних. Ви просто помістіть список в об'єкт JSON і помістіть його в базу даних. А потім ви читаєте з бази даних.
JSON може виглядати так:
[
{"task":"get milk","who":"Scott","dueDate":"2013-05-19","done":false},
{"task":"get broccoli","who":"Elisabeth","dueDate":"2013-05-21","done":false},
{"task":"get garlic","who":"Trish","dueDate":"2013-05-30","done":false},
{"task":"get eggs","who":"Josh","dueDate":"2013-05-15","done":true}
]
(зі створення списку покупок із файлом json у стеку Overflow).
Або щось наближається до цього. Існує деякий інший облік, що цей диван є частиною документа.
Вся справа в тому, що його невірний спосіб наблизитись, і список тодо в базі даних документів може бути ідеально підходить до того, що ви намагаєтеся зробити з меншими накладними витратами на концепцію, як це зробити.