J'ai une conception de base de données que je voudrais obtenir quelques commentaires/aide avec. Je possède 3 entités différentes: Cities
, TimeZones
, Rules
.My World_Time DataBase design/ORM
- un
City
est associé à 1 et seulement 1TimeZone
(non < 1, pas> 1: seulement 1) - un
TimeZone
peut être associé à de nombreuxCities
(pas sûr du nombre minimum de villes). - un
TimeZone
a exactement 2Rules
(DST et ST). - chaque
Rule
peut être associée à beaucoup de différentsTimeZones
J'ai conçu mes tableaux à l'aide du Designer ORM juste pour me aider à visualiser:
Dans ce ORM, il y a:
- une relation un à plusieurs entre le parent
TimeZones
et l'enfantCities
- un à plusieurs entre le parent
TimeZones
et l'enfantTimeZoneRule
- un à plusieurs entre le parent
Rule
et l'enfantTimeZoneRule
Maintenant, pour mes questions:
Will ce beaucoup à beaucoup de travail de table de jonction? Comment puis-je savoir ce que
Rule
appartient à ceTimeZone
? J'ai la propriétéTimeZone.RuleName
pour aller chercher leRule
pour unTimeZone
mais que faire si je voulais revenir en arrière, par exemple trouver tous lesTimeZones
auxquels une règle s'applique?Comment puis-je autour de l'aide d'une chaîne (
RuleName
) pour trouver leRule
TimeZone depuis unTimeZone
a 2 règles (avec le même nom, mais est différent/ID unique).Comment remplir cette table de jonction avec les bons ID/lignes?
Je sais
City
a uneTimeZoneId
que j'ai ajouté les valeurs réelles pour, et je peux utiliser ceTimeZoneId
pour trouver leTimeZone
unCity
appartient, mais comment puis-je trouver tous lesCities
unTimeZone
contient?
Ci-dessous je collais le code TSQL je l'ai écrit pour créer ces tables, la seule chose que je n'ai pas sont les associations comme je l'ai jamais fait dans les associations TSQL (clairement).
USE World_Time
IF OBJECT_ID('timezones', 'U') IS NOT NULL
DROP TABLE timezones;
IF OBJECT_ID('rules', 'U') IS NOT NULL
DROP TABLE rules;
IF OBJECT_ID('leaps', 'U') IS NOT NULL
DROP TABLE leaps;
IF OBJECT_ID('cities', 'U') IS NOT NULL
DROP TABLE cities;
IF OBJECT_ID('timezone_rule', 'U') IS NOT NULL
DROP TABLE timezone_rule;
CREATE TABLE timezones
(
[id] INT NOT NULL PRIMARY KEY,
[name] VARCHAR(30) NOT NULL,
[bias] SMALLINT NOT NULL,
[rule_name] VARCHAR(10),
[tz_abreviation] VARCHAR(7) NOT NULL,
[country_code] CHAR(2) NOT NULL,
[country_name] VARCHAR(42) NOT NULL,
[comments] VARCHAR(100),
[coordinates] VARCHAR(20),
[version] ROWVERSION
);
CREATE TABLE rules
(
[id] INT NOT NULL IDENTITY PRIMARY KEY,
[name] VARCHAR(10) NOT NULL,
[bias] SMALLINT NOT NULL,
[start_year] SMALLINT NOT NULL,
[end_year] SMALLINT NOT NULL,
[month] TINYINT NOT NULL,
[date] VARCHAR(7) NOT NULL,
[time] TIME(0) NOT NULL,
[time_type] CHAR(1),
[letter] CHAR(1),
[version] ROWVERSION
);
CREATE TABLE leaps
(
[id] INT NOT NULL IDENTITY PRIMARY KEY,
[year] SMALLINT NOT NULL,
[month] VARCHAR(3),
[day] SMALLINT NOT NULL,
[time] TIME(0) NOT NULL,
[correction] VARCHAR(1) NOT NULL,
[rs] VARCHAR(1) NOT NULL,
[version] ROWVERSION
);
CREATE TABLE cities
(
[id] INT NOT NULL IDENTITY PRIMARY KEY,
[name] VARCHAR(200) NOT NULL,
[ascii_name] VARCHAR(200),
[alternate_names] VARCHAR(5000),
[latitude] FLOAT(24),
[longitude] FLOAT(24),
[feature_class] CHAR(1),
[feature_code] VARCHAR(10),
[country_code] CHAR(2) NOT NULL,
[country_code2] VARCHAR(60),
[population] BIGINT,
[elevation] INT,
[modification_date] DATETIME NOT NULL,
[admin1code] VARCHAR(20),
[admin2code] VARCHAR(80),
[admin3code] VARCHAR(20),
[admin4code] VARCHAR(20),
[gtopo30] INT,
[timezone_id] INT NOT NULL,
[timezone_name] VARCHAR(60) NOT NULL,
[version] ROWVERSION
);
CREATE TABLE timezone_rule
(
[timezone_id] INT NOT NULL,
[rule_id] INT NOT NULL,
PRIMARY KEY (timezone_id, rule_id),
[version] ROWVERSION
);
-- Is this how I would populate the junction table?
--INSERT INTO timezone_rule
-- (timezone_id)
--SELECT id
--FROM timezones;
--INSERT INTO timezone_rule
-- (rule_id)
--SELECT id
--FROM rules;
Je présenter des excuses pour le poste monstrueuses que je viens d'essayer de le faire pendant des mois et je me suis marre Binging/googler pendant des heures tous les jours: P Merci d'avoir pris le temps de lire, j'apprécie beaucoup il/
-Francisco
La raison pour laquelle je ne suis pas en utilisant des bibliothèques standard est parce que ce sera une base de données locale sur une application Windows Phone, qui, malheureusement, ne contient pas les bibliothèques. –