реляционные проблемы базы данных mysql - PullRequest
0 голосов
/ 15 марта 2011

Привет, хорошо, у меня есть две таблицы, одна из которых называется Login, а другая - User. Между таблицей пользователей и таблицей входа существует отношение один к одному:

Login:
=-=-=-=-
LoginID (Primary, Not Null, Auto Inc)
UserID (Primary)
Username (not null)
Password (not null)

User:
=-=-=-=-
UserID (Primary)
Email
Name etc

Я не могу разобраться с этим, но я не знаю, когда речь зашла о кодировании на моей странице, как задан UserID в таблице Login, относящейся к реальному пользователю?

Если я отвожу клиента на страницу создания пользователя и он заполняет данные пользователя, я пересылаю его в поля имени пользователя и пароля, которые переходят в другую таблицу. Как устанавливается идентификатор пользователя в таблице входа в систему? Atm его нет?

В случае, если кто-либо захочет перепроектировать мои данные таблицы в диаграмме MySQL, см. Код ниже:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `gymwebsite` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;

USE `gymwebsite` ;
-- -----------------------------------------------------

-- Table `gymwebsite`.`User`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `gymwebsite`.`User` (
  `UserID` INT NOT NULL AUTO_INCREMENT ,
  `Email` VARCHAR(245) NULL ,
  `FirstName` VARCHAR(45) NULL ,    
  `SecondName` VARCHAR(45) NULL ,    
  `DOB` VARCHAR(15) NULL ,    
  `Location` VARCHAR(45) NULL ,    
  `Aboutme` VARCHAR(245) NULL ,    
  PRIMARY KEY (`UserID`) )   
ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `gymwebsite`.`Pictures`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `gymwebsite`.`Pictures` (
  `PictureID` INT NOT NULL AUTO_INCREMENT ,
  `UserID` INT NOT NULL ,
  PRIMARY KEY (`PictureID`, `UserID`) ,
  INDEX `fk_Pictures_Userinfo1` (`UserID` ASC) ,
  CONSTRAINT `fk_Pictures_Userinfo1`
    FOREIGN KEY (`UserID` )
    REFERENCES `gymwebsite`.`User` (`UserID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------

-- Table `gymwebsite`.`WallPostings`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `gymwebsite`.`WallPostings` (
  `UserwallID` INT NOT NULL AUTO_INCREMENT ,
  `UserID` INT NOT NULL ,
  PRIMARY KEY (`UserwallID`, `UserID`) ,
  INDEX `fk_WallPostings_Userinfo1` (`UserID` ASC) ,
  CONSTRAINT `fk_WallPostings_Userinfo1`
    FOREIGN KEY (`UserID` )
    REFERENCES `gymwebsite`.`User` (`UserID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------

-- Table `gymwebsite`.`Login`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `gymwebsite`.`Login` (
  `LoginID` INT NOT NULL AUTO_INCREMENT ,
  `UserID` INT NOT NULL ,
  `username` VARCHAR(245) NOT NULL ,
  `password` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`LoginID`, `UserID`) ,
  INDEX `fk_Login_Userinfo` (`UserID` ASC) ,
  CONSTRAINT `fk_Login_Userinfo`
    FOREIGN KEY (`UserID` )
    REFERENCES `gymwebsite`.`User` (`UserID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------

-- Table `gymwebsite`.`DietPlan`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `gymwebsite`.`DietPlan` (
  `DietPlanID` INT NOT NULL AUTO_INCREMENT ,
  `UserID` INT NOT NULL ,
  PRIMARY KEY (`DietPlanID`, `UserID`) ,
  INDEX `fk_DietPlan_Userinfo1` (`UserID` ASC) ,
  CONSTRAINT `fk_DietPlan_Userinfo1`
    FOREIGN KEY (`UserID` )
    REFERENCES `gymwebsite`.`User` (`UserID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `gymwebsite`.`WorkoutPlan`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `gymwebsite`.`WorkoutPlan` (

  `WorkOutID` INT NOT NULL AUTO_INCREMENT ,

  `UserID` INT NOT NULL ,

  PRIMARY KEY (`WorkOutID`, `UserID`) ,

  INDEX `fk_WorkoutPlan_Userinfo1` (`UserID` ASC) ,

  CONSTRAINT `fk_WorkoutPlan_Userinfo1`

    FOREIGN KEY (`UserID` )

    REFERENCES `gymwebsite`.`User` (`UserID` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB;





-- -----------------------------------------------------

-- Table `gymwebsite`.`Friends`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `gymwebsite`.`Friends` (

  `idFriends` INT NOT NULL AUTO_INCREMENT ,

  `UserID` INT NOT NULL ,

  PRIMARY KEY (`idFriends`, `UserID`) ,

  INDEX `fk_Friends_Userinfo1` (`UserID` ASC) ,

  CONSTRAINT `fk_Friends_Userinfo1`

    FOREIGN KEY (`UserID` )

    REFERENCES `gymwebsite`.`User` (`UserID` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB;







SET SQL_MODE=@OLD_SQL_MODE;

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

1 Ответ

1 голос
/ 15 марта 2011

Если User и Login имеют отношение 1: 1, вы должны удалить LoginID из таблицы Login и вместо этого сделать UserID первичным ключом.
Или, если все пользователи имеют регистрационную информацию, вы можете вместо этого переместить столбцы в таблицу User. (Тем самым вы также удаляете целый класс проблем, связанных с применением отношений 1-1).

Вы должны , а не вставлять любые строки в базу данных, пока пользователь не заполнит всю регистрационную форму. Сохраните данные формы в сеансе, а затем в конце выполните все вставки сразу во все таблицы, а затем подтвердите.

Возможно, в c # есть функция для определения последнего вставленного идентификатора (UserID) для добавления в таблицу Login, в противном случае посмотрите документацию MySQL для insert ID

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...