Doğru benim adres defterinizi gerçekleştirmek için MySQL bir yabancı anahtar senaryo nasıl ayarlanır

0 Cevap php

Ben bir veritabanı yapmak ve yol boyunca öğrenme edilmiştir. Geçenlerde InnoDB kullanan ve birlikte tabloları bağlamak için yabancı tuşlarını kullanarak girdim.

Ama bütün dürüst ben muhtemelen körü körüne benim yabancı anahtarları yapıyorum. Bir yabancı anahtar yaparken ben kullanmak gerekir, doğru ayarlamak ve kontrol listesi nedir.

Yabancı anahtarlar ile benim anlayış bir Master Tablosu var, ve benim Usta Tablo herhangi değişikliklerin belirli bir sütuna yabancı tuşunu basılı tutun herhangi tablolara yansıtılır olmasıdır.

Yani benim şimdiki log-in sistemi olan bir böyle kurmak

users
=====
id PK
username
password

ve benim diğer tabloları bu gibi bakmak

contacts
========
id PK
user_id references `users`.`id`
group
name
address

groups
======
id PK
user_id
group_name

group_contacts
==============
id PK
group_id references `group`.`id`
contact_id references `contacts`.`id`

Ana Tablo CASCADE seçeneği doğru DELETE ON kullanarak silinir Benim anlayış bu tabloları silinebilir?

Benim sorun şimdi yapmak için görünmüyor olabilir group_id ve groups. id ve {[(için contact_id Yabancı anahtar 4)]}. id Bu kurulum ile. SQL ifadelerini çalıştırırken bir hata alıyorum.

Bir kullanıcı bir gruba bir kişiyi yerleştirir, tüm otomatik hale böylece benim adres defteri yapmaya çalışıyorum ve ben çok bilgilerini değiştirmek zorunda değilsiniz. group_contact masa Ben her temas aittir nerede görmek istediğiniz zaman sorgulama olacak DÜŞÜNÜYORUM budur. Ben bir grubun adını değiştirirseniz tüm tablolar karşısında doğru yansıtıyor mu? Yabancı anahtarlar gelip ben bu tuşlar benim için nasıl davranması gerektiğini kendimi karıştırıyorum yerdir.

Ama dediğim gibi ben bir hata almadan yabancı bir anahtar yapmak için görünmüyor olabilir dedi.

(, Ben var benim Yabancı anahtar soru, Google'dan biliyorum ama benim tam senaryoya geri bildirim ve giriş almadan bu şekilde öğrenmek gibi olamaz

Istemek çok ama çünkü benim karışıklık Ben de grup adı değişikliğini ele almak ve belirli bir gruba ait kişileri aşağı çekmek için veritabanını sorgulamak için bir PHP komut dosyası nasıl yapabilirsiniz görmek için çalışırken bir sabit zaman yaşıyorum değildir.

Bu gerçekten beni çok çocuklar yardımcı olur, ben bir şey öğrenmek istiyoruz!

Benim sorgu şudur:

ALTER TABLE `list_`.`groups_contacts`
    ADD CONSTRAINT `group_id` FOREIGN KEY (`group_id`) REFERENCES `list_`.`groups` (`id`)
    ADD CONSTRAINT `contact_id` FOREIGN KEY (`contact_id`) REFERENCES `list_`.`contacts` (`id`);

Benim veritabanı bu gibi görünüyor:

CREATE TABLE `list_`.`buyer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` tinyint(11) NOT NULL,
  `isClosed` tinyint(1) NOT NULL,
  `display_limit` int(1),
  `first_name` varchar(255) NOT NULL,
  `last_name` varchar(255) NOT NULL,
  `prop_address` varchar(255) NOT NULL,
  `city` varchar(255) NOT NULL,
  `state` varchar(11) NOT NULL,
  `zip` varchar(5) NOT NULL,
  `cell_phone` varchar(16) NOT NULL,
  `home_phone` varchar(16) NOT NULL,
  `other1` varchar(16) NOT NULL,
  `other2` varchar(16) NOT NULL,
  `comments` text NOT NULL,
  `comment_exist` tinyint(1) NOT NULL,
  `comment_date` text NOT NULL,
  `date_added` date NOT NULL,
  `date_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`,`user_id`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8 AUTO_INCREMENT=23 ;

CREATE TABLE `list_`.`company` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` tinyint(11) NOT NULL DEFAULT '0',
  `company_name` varchar(128) NOT NULL,
  PRIMARY KEY (`id`, `user_id`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

CREATE TABLE `list_`.`contacts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` tinyint(11) NOT NULL,
  `group` varchar(128) NOT NULL,
  `first_name` varchar(128) NOT NULL,
  `last_name` varchar(128) NOT NULL,
  `address` varchar(128) NOT NULL,
  `city` varchar(128) NOT NULL,
  `state` varchar(2) NOT NULL,
  `zip` int(5) NOT NULL,
  `phone_number` varchar(16) NOT NULL,
  `cell_number` varchar(16) NOT NULL,
  `work_number` varchar(16) NOT NULL,
  `fax_number` varchar(16) NOT NULL,
  `email` varchar(128) NOT NULL,
  `company` varchar(55) NOT NULL,
  `title` varchar(56) NOT NULL,
  `notes` text NOT NULL,
  `date_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`,`user_id`),
  KEY `user_id` (`user_id`),
  KEY `group` (`group`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;

CREATE TABLE `list_`.`groups` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` tinyint(11) NOT NULL,
  `position` int(8) unsigned NOT NULL DEFAULT '0',
  `name` varchar(128) NOT NULL,
  `date_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`,`user_id`),
  KEY `user_id` (`user_id`),
  KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 AUTO_INCREMENT=32 ;

CREATE TABLE `list_`.`prospect` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` tinyint(11) NOT NULL,
  `isClosed` tinyint(1) DEFAULT '0',
  `display_limit` int(1) DEFAULT '0',
  `first_name` varchar(255) NOT NULL,
  `last_name` varchar(255) NOT NULL,
  `prop_address` varchar(255) NOT NULL,
  `city` varchar(255) NOT NULL,
  `state` varchar(11) NOT NULL,
  `zip` varchar(5) NOT NULL,
  `cell_phone` varchar(16) NOT NULL,
  `home_phone` varchar(16) NOT NULL,
  `other1` varchar(16) NOT NULL,
  `other2` varchar(16) NOT NULL,
  `comments` text NOT NULL,
  `date_added` date NOT NULL,
  `date_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`,`user_id`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

CREATE TABLE `list_`.`seller` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` tinyint(11) NOT NULL,
  `file` int(11) DEFAULT NULL,
  `isClosed` tinyint(1) NOT NULL,
  `display_limit` int(1) NOT NULL DEFAULT '0',
  `first_name` varchar(255) NOT NULL,
  `last_name` varchar(255) NOT NULL,
  `prop_address` varchar(255) NOT NULL,
  `city` varchar(255) NOT NULL,
  `state` varchar(22) NOT NULL,
  `zip` varchar(5) NOT NULL,
  `cell_phone` varchar(16) NOT NULL,
  `home_phone` varchar(16) NOT NULL,
  `other1` varchar(16) NOT NULL,
  `other2` varchar(16) NOT NULL,
  `comments` text NOT NULL,
  `comment_exist` tinyint(1) NOT NULL,
  `comment_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `date_added` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `date_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`,`user_id`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 AUTO_INCREMENT=21 ;

CREATE TABLE `list_`.`settings` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` tinyint(11) NOT NULL,
  `seller_display_limit` int(4) DEFAULT '0',
  `buyer_display_limit` int(4) DEFAULT '0',
  `prospect_display_limit` int(4) DEFAULT '0',
  `property_display_limit` int(4) DEFAULT '0',
  `date_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`,`user_id`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

CREATE TABLE `list_`.`users` (
  `id` tinyint(11) NOT NULL AUTO_INCREMENT,
  `md5_id` varchar(200) NOT NULL,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `user_level` tinyint(1) DEFAULT '1',
  `first_name` varchar(200) NOT NULL,
  `last_name` varchar(200) NOT NULL,
  `email` varchar(200) DEFAULT NULL,
  `approved` int(1) NOT NULL,
  `banned` int(1) NOT NULL,
  `date_joined` date NOT NULL,
  `ip` varchar(15) DEFAULT NULL,
  `activation_code` int(9) DEFAULT NULL,
  `ckey` varchar(220) NOT NULL,
  `ctime` varchar(220) NOT NULL,
  `last_logged_in` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `account_number` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

ALTER TABLE `list_`.`buyer`
  ADD CONSTRAINT `buyer_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON UPDATE CASCADE;

-- 
-- Constraints for table `company`
-- 
ALTER TABLE `list_`.`company`
  ADD CONSTRAINT `company_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON UPDATE CASCADE;

-- 
-- Constraints for table `contacts`
-- 
ALTER TABLE `list_`.`contacts`
  ADD CONSTRAINT `contacts_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`),
  ADD CONSTRAINT `group_ibfk_2` FOREIGN KEY (`group`) REFERENCES `groups` (`name`) ON UPDATE CASCADE;

-- 
-- Constraints for table `groups`
-- 
ALTER TABLE `list_`.`groups`
  ADD CONSTRAINT `group_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`);

-- 
-- Constraints for table `prospect`
-- 
ALTER TABLE `list_`.`prospect`
  ADD CONSTRAINT `prospect_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`);

-- 
-- Constraints for table `seller`
-- 
ALTER TABLE `list_`.`seller`
  ADD CONSTRAINT `seller_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`);

-- 
-- Constraints for table `settings`
-- 
ALTER TABLE `list_`.`settings`
  ADD CONSTRAINT `settings_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`);

0 Cevap