2016-03-21 3 views
0

Ich habe eine Datenbank, die mit 2 Ländern, IT und RO arbeiten muss. Ich habe eine Tabelle namens Benutzer, die auch den Geburtsort enthält.Mehrsprachige Datenbank Geburtsort Design

User 
| id | name | surname | birthplace | 

| 1 | Test | Test | New York | 

Ich habe auch 2 Tabellen für den Geburtsort, einen für die IT-und einen für die ROs. Ich kann nicht alle Städte in einem Tisch speichern, weil IT und RO eine andere Gerarchie haben (Region, Provinz, Bezirk ...). So war mein erster Gedanke, für jedes Land ein Geburtsort Feld zu tun, wie folgt aus:

User 
    | id | name | surname | birthplaceIT | birthplaceRO | 

Das Problem ist, dass jedes Mal, wenn eine Nation hinzugefügt wird, würde ich die Datenbank ändern haben und die Anwendung. Auf der anderen Seite kann ich keine "Geburtsort" -Tabelle erstellen, da die IT- und RO-Adressen nicht kompatibel sind.

Also, ich kann das nicht tun:

Birthplace 
| idUser | country | city | 

Weil ich nicht „Stadt“ sowohl für die IT-Städte-Tabelle und die RO diejenigen beziehen.

Vorschläge?

BEARBEITEN. In meiner PHP-Anwendung verwende ich Symfony mit Doctrine, ein ORM, also brauche ich die Fremdschlüssel-Einschränkung zwischen dem Benutzer und der CityID!

Antwort

0

Statt Geburtsort in User Tabelle zu speichern, ändern Sie es zu der es lassen nennen birthplace ID - es einfach integer sein kann, aber man kann etwas anspruchsvollere tun und verwendet eindeutige Codes (eigene oder vielleicht gibt es „richtigen“ geographischen Codes).

Dann können Sie Tabelle für jeweils länderspezifischen Geburtsort haben und Tabellen basierend auf Geburtsort ID beitreten. Auf diese Weise können Sie jede länderspezifische geografische Hierarchie in einer eigenen Tabelle beibehalten. Wenn Sie ein anderes Land hinzufügen müssen, erstellen Sie einfach eine andere Tabelle für dieses Land und verbinden Sie sie mit User.

+0

Also, in der neuen "Birthplace" Tabelle würde ich ein Feld für jedes Land machen müssen? Ich meine, wenn ich "city_IT", "city_RO" Felder usw. machen muss, ist es nicht so anders als mein erster Gedanke! Tatsache ist, dass ich mich nicht auf einen Stadttisch beziehen kann, ich habe einen Stadttisch für jedes Land. Aber vielleicht habe ich deine Antwort nicht verstanden! –

+0

Wie gesagt, das Problem ist, dass ich eine "CityIT" -Tabelle und eine "CityRO" -Tabelle habe, und ich kann sie nicht vereinheitlichen, weil sie unterschiedliche Felder haben (wegen ihrer Hierarchie hat zum Beispiel eine italienische Stadt eine Provinz und dann eine Region, statt einer RO Stadt hat entweder eine Municipul/Oras, hat keine Region, es hat die Ausnahme von Bukarest etc. –

+0

Sagen wir, Sie haben eine Stadt A in Italien und die Stadt A in Rumänien Beide haben den gleichen Namen. dann Eine Stadt in Italien wird eindeutigen Code haben IT123456 und Stadt A in Rumänien einzigartigen Code RO987654 haben dann werden Sie zwei Tabellen haben. 'BirthplaceIT BirthplaceID | BirthplaceName | Land | Region | Anschrift | Postleitzahl usw. ' ' GeburtsortRO BirthplaceID | Birthpla ceName | Land | Land | Grafschaft | Adresse | Postleitzahl usw. ' In' User' Sie User1 mit birthplaceID IT123456 haben - so wird dies in Italien sein und man kann leicht verbinden zwei oder mehr Tabellen basiert auf birthplaceID so können Sie UserID + birthplaceName – iaforek