Я предлагаю использовать простой тип поля битовой маски:
Например:
1 = breakfast
2 = brunch
4 = lunch
8 = dinner
Вы можете добавить больше, если это станет необходимым.
ЕслиВ ресторане есть и завтрак, и обед, но не поздний завтрак и не ужин, это 1 + 4, поэтому столбец получает 5.
Если в ресторане есть все вышеперечисленное, то это 1 + 2 + 4 + 8, что составляет 15.
Однако, вероятно, он не самый читаемый для будущих сопровождающих БД.Однако это простой способ сделать так, чтобы в одном столбце указывалось несколько параметров.
Редактировать:
Это просто простые двоичные манипуляции.Это работает следующим образом:
Dinner Lunch Brunch Breakfast
-------- ------- -------- ---------
0 0 0 1 1 (Breakfast only)
1 1 0 0 12 (Dinner + Lunch)
1 1 1 1 15 (All four)
Преимущество этого типа поля заключается в том, что вы можете добавлять дополнительные типы меню без изменений в базу данных, предполагая, что ваше поле int хранит достаточно битов.
В вашей программе вы можете определить, какие виды меню доступны с некоторыми побитовыми операторами.В C #, например:
const int BREAKFAST = 1;
const int BRUNCH = 2;
const int LUNCH = 4;
const int DINNER = 8;
int RestaurantMenuType = 5;
bool OffsersBreakfastMenu = (RestaurantMenuType & BREAKFAST) == BREAKFAST;
bool OffsersBrunchMenu = (RestaurantMenuType & BRUNCH) == BRUNCH;
bool OffsersLunchMenu = (RestaurantMenuType & LUNCH) == LUNCH;
bool OffersDinnerMenu = (RestaurantMenuType & DINNER) == DINNER;
Console.WriteLine("Offers breakfast? {0}", OffsersBreakfastMenu ? "Yes" : "No");
Console.WriteLine("Offers brunch? {0}", OffsersBrunchMenu ? "Yes" : "No");
Console.WriteLine("Offers lunch? {0}", OffsersLunchMenu ? "Yes" : "No");
Console.WriteLine("Offers dinner? {0}", OffersDinnerMenu ? "Yes" : "No");