2014-12-10 2 views
1

Я хочу изучить ASP.NET MVC5, поэтому я решил сделать кое-что из обзорного сайта. Я хочу добавить diffrent консольные/компьютерные игры и фильмы и т.д. Для таблицы игр у меня есть это:Структура базы данных - связывание данных

CREATE TABLE [dbo].[Games] (
    [GameId]  INT    IDENTITY (1, 1) NOT NULL, 
    [Title] NVARCHAR (MAX) NOT NULL, 
    [Genre] NVARCHAR (MAX) NOT NULL, 
    [Format] NVARCHAR (MAX) NOT NULL, 
    CONSTRAINT [PK_dbo.Games] PRIMARY KEY CLUSTERED ([GameId] ASC) 
); 

У меня есть один и тот же код для фильма таблицы, и здесь есть пользовательская таблица I получен от MVC:

CREATE TABLE [dbo].[AspNetUsers] (
    [Id]     NVARCHAR (128) NOT NULL, 
    [Email]    NVARCHAR (256) NULL, 
    [EmailConfirmed]  BIT   NOT NULL, 
    [PasswordHash]   NVARCHAR (MAX) NULL, 
    [SecurityStamp]  NVARCHAR (MAX) NULL, 
    [PhoneNumber]   NVARCHAR (MAX) NULL, 
    [PhoneNumberConfirmed] BIT   NOT NULL, 
    [TwoFactorEnabled]  BIT   NOT NULL, 
    [LockoutEndDateUtc] DATETIME  NULL, 
    [LockoutEnabled]  BIT   NOT NULL, 
    [AccessFailedCount] INT   NOT NULL, 
    [UserName]    NVARCHAR (256) NOT NULL, 
    CONSTRAINT [PK_dbo.AspNetUsers] PRIMARY KEY CLUSTERED ([Id] ASC) 
); 
GO 
CREATE UNIQUE NONCLUSTERED INDEX [UserNameIndex] 
    ON [dbo].[AspNetUsers]([UserName] ASC); 

Но мой вопрос в том, как связать фильмы/игры с пользователем? Должен ли я просто добавить FK в таблицу игр/фильмов, или если FK войдет в таблицу пользователей?

И следующее, как я могу хранить рейтинг, (INT) и обзоры (NVARCHAR)? Думаю, было бы лучше, если бы я приготовил для этого специальный стол, а не ссылку на таблицу игры/фильма?

И следующий вопрос к этому вопросу. Как связать эти два?

И как только они связаны ... как я буду продолжать и заполнять свою базу данных? Я бы предположил, что смогу сделать какой-то сценарий для заполнения их для меня?

ответ

0
AspNetUsers 
------ 
Id (PK) 

Game 
------ 
Id (PK) 

Review 
------ 
Id (PK) 
GameId (FK) 
UserId (FK) 

или сделать составной ключ, если пользователь может просматривать только время игры 1

Review 
------ 
GameId (PK) 
UserId (PK) 

, но если вы хотите, чтобы фильмы и игры, вы могли бы сделать

Review 
------ 
Id (PK) 
GameId (FK NULL) 
MovieId (FK NULL) 
UserId (FK) 

Посмотрите в Таблица Отношения

+0

Единственная проблема, с которой я сталкиваюсь, заключается в том, что я получаю AspNetUsers из mvc5, и я не могу изменить эту таблицу. –

+0

Вы можете это изменить. Изучите классы UserManager и RoleManager для AspNetMembership. http://msdn.microsoft.com/en-us/magazine/dn605872.aspx. Это может привести к тому, что объекты Entity Framework будут подключаться к этим таблицам членства. – hunter

0

Технически вы должны иметь отдельную таблицу соединений с внешним ключом для фильма и один для пользователя, поскольку вы имеете дело с отношениями M2M здесь: пользователи могут просматривать много фильмов и фильмов, которые могут быть просмотрены многими пользователи. Аналогично для игр.

Однако, поскольку вы начинаете с MVC, вы фактически ставите телегу перед лошадью. Хотя вы можете использовать существующую базу данных с Entity Framework, гораздо предпочтительнее позволить Entity Framework управлять вашей схемой базы данных для вас на основе кода, который вы пишете. Затем, когда вы вносите изменения в свои классы, вы можете создавать миграции, которые будут соответствующим образом обновлять схему.

Просто выполните поиск чего-то вроде «кода рамки сущности». Вы найдете множество статей и руководств, объясняющих, как идти.

0

Я предполагаю, что связь между пользователями и играми заключается в том, что пользователи будут писать обзоры игр. Если это так, пользователь может просматривать несколько игр, и многие пользователи могут просмотреть одну игру. Но вам не хватает таблицы обзора, которая должна быть связана между двумя перечисленными вами таблицами.

Смежные вопросы