Un suggerimento per creare uno schema db

0

Ho bisogno di realizzare un database in questa modalità:

TABLE restaurant

con i campi "classici" di un luogo: indirizzo, numero civico, telefono, sito web, ecc. ecc.

Devo indicare anche i giorni di apertura // chiusura. Per esempio. Dal lunedì al mercoledì chiuso, sabato solo sera e domenica pranzo + sera.

Quindi, ho pensato a un altro tavolo con 14 righe:

ID_RESTAURANT  MONDAY_LUNCH MONDAY_EVENING [...] SUNDAY_EVENING
    12         0             0                    1   

E "finalmente" ogni ristorante ha la sua cucina ("internazionale", "cinese", "giapponese")

Un'altra tabella con una colonna per ogni cottura?

Infine, diversi servizi. "Aria condizionata", "Carta di credito", "Animali ammessi" "bambini dipendenti" ecc. Ecc.

Un'altra tabella con una colonna per ogni "servizio"?

ID_RESTAURANT    CONDITIONED    CREDIT_CARD     ANIMALS
    12              1              1              0
    13              0              1              1

Spero di essere chiaro. Grazie mille!

    
posta sineverba 08.01.2014 - 19:46
fonte

2 risposte

1
TABLE Service (SERVICE_ID, SERVICE_NAME, ...)
TABLE Restaurant (RESTAURANT_ID, RESTAURANT_NAME, ...)
TABLE RestaurantService (RESTAURANT_ID, SERVICE_ID)

In breve, se il campo fa parte della chiave o dipende dalla chiave della tabella, lo stai facendo bene. Leggi di più sul semplicissimo normalizzazione link che MichaelT ha già fornito.

    
risposta data 08.01.2014 - 20:44
fonte
5

C'è uno scherzo che ho ascoltato qualche volta.

If you ask a C programer to count to 10, you get '0, 1, 2, 3, 4, 5, 6, 7, 8, 9'.
If you ask a DBA to count to 10, you get '0, 1, many'.

La chiave per capire questa barzelletta è che se hai a che fare con più di una cosa in un database, devi davvero averne molti ... non un 2 o un 3. Ci sono molti molti descritto in questo database che dovrebbe essere trattato come tale.



       +-----------+   +-----------+     +------------+
       | restaurant|   | rest_time |     | meal       |
       |-----------|   |-----------|     |------------|
   +-->| id        |&lt--+ rid       | +-->| id         |
   |   | name      | | | day (enum)| |   | name       |
   |   +-----------+ | | mealid    +-+   +------------+
   |                 | | open (b)  |
   |   +-----------+ | +-----------+
   |   | phone     | |
   |   |-----------| | +------------+    +------------+
   |   | phnum     | | | rest_serv  |    | service    |
   +---+ rid       | | |------------|    |------------|
       | type      | +-+ rid        | +--> id         |
       +-----------+   | sid        +-+  | name       |
                       | has        |    |            |
                       +------------+    +------------+

Hai un ristorante che ha alcuni attributi. Cose che il ristorante può avere solo una delle colonne in quel tavolo. Può avere solo un nome e un id. A seconda della descrizione, potrebbe avere un solo indirizzo (anche se si ha una catena come McDonalds). Altre cose ha solo una di cose come le capacità.

Un ristorante può avere più telefoni (inviare il tuo ordine via vs prenotazioni?) E i telefoni appartengono solo a un ristorante. Questa è una relazione uno a molti.

Il ristorante ha anche alcuni servizi - ma tutti i ristoranti possono avere anche quei stessi servizi. Vuoi essere in grado di fare una domanda su "che ristoranti ha l'aria condizionata?"

Allo stesso modo, un ristorante ha anche alcuni pasti che serve in alcuni giorni. Ho un approccio semplificato che funziona con mysql lì per giorni, ma avere un tavolo separato per giorni non sarebbe inappropriato e sarebbe del tutto appropriato se hai cose come le vacanze che vengono chiamate appositamente (Capodanno: pranzo, no cena).

    
risposta data 08.01.2014 - 21:15
fonte

Leggi altre domande sui tag