2016-04-01 30 views
0

Neden bununla uğraştığımı bilmiyorum, çok basit bir kavram gibi görünüyor. Bu yüzden benim mücadelem bana veri modellemenin başka bir bileşene ihtiyacı olduğunu düşünür ..."A" veya "Ait" ilişki veya başka bir şey var mı?

Laravel 5 kullanıyorum ve bazı model ilişkilerini tanımlamaya çalışıyorum. BelongsTo, HasA, vb. Kodu yazabilmeden önce, en azından kavramsal olarak oluşturduğum ilişki türünü anlamalıyım.

Kullanıcıların, kullanıcılara yönlendirme bağlantıları gönderebilecekleri bir uygulamam var; bir kullanıcı bağlantıyı tıklatır ve kaydolursa, kullanıcı kaydı, onlara gönderilen kodu not eder. Bu şekilde geri izleyebilir ve belirli bir kullanıcıyı kimin yönlendirdiğini görebilirim.

KULLANICI

+----+-------------+ 
| id | referral_id | 
+----+-------------+ 
| 1 | 1   | 
| 2 | null  | 
| 3 | 2   | 
+----+-------------+ 

yönlendirmeler

+----+---------------+---------+ 
| id | referral_code | user_id | 
+----+---------------+---------+ 
| 1 |   12345 |  2 | 
| 2 |   54321 |  2 | 
| 3 |   99999 |  2 | 
+----+---------------+---------+ 

USERS.REFERRAL_ID referanslar REFERRALS.ID
ve: Ama bir tavsiye

Tablolar kaydolmak için gerekli DEĞİLDİR REFERRALS.USER_ID referanslar USERS.ID

Ama bunlar ne tür ilişkiler?
Bana açıkça görünen tek şey, REFERRALS.USER_ID'unUSERS'a ait olmasıdır.

Ancak, 'dan ne dersiniz? belongsTo Yönlendirmeler, kayıt gerektirmediğinden ve kullanıcının herhangi bir şekilde "sahibi" gibi hissetmediğinden doğru gelmiyor. hasA başvurusunun söylenmesi, kullanıcının kendisinin sahip olmadığı veya hatta yönlendirmeyi gerektirmediği şeklinde de doğru gelmiyor.

Sanırım kafam karıştığında, REFERRALS isteğe bağlı bir varlıktır.

USERS.REFERRAL_ID ve REFERRALS.ID arasındaki ilişkiyi nasıl kavramsallaştırmalıyım?

Bu tür "dairesel referans" olması kötü mü? Bir pivot tablo oluşturmaktan daha iyi olur muyum?

cevap

0

Kullanıcı tablosundaki Tavsiye tabloya herhangi bir referans eklemek gerek yok, zaten (user_id sütun) ilişki sevk tabloda tanımlanmıştır buna sahip

fazla okuma: https://en.wikipedia.org/wiki/Database_normalization

İlişki

olduğunu
USER has many REFERRALS 
REFERRAL belongs to USER (inviter) 
REFERRAL belongs to USER (invitee) 

sizin YÖNLENDİRMELER tablo değiştirin

+----+---------------+---------+------------+ 
| id | referral_code | user_id | invitee_id | 
+----+---------------+---------+------------+ 
| 1 |   12345 |  2 |   1 | 
| 2 |   54321 |  1 |  null | 
| 3 |   99999 |  3 |   1 | 
+----+---------------+---------+------------+ 

user_id

invitee_id kabul eder ve

invitee_id kolon() null olduğunu kaydeder ve kullanıcılar tablodan tarihten itibaren invitee kimliği içerecektir kullanıcısının kimliğinde olan davetiye gönderir kullanıcısının kimliğinde olduğu katılıyorlar.

Bunu, davetli ile davetli arasında bir JOIN tablosu olarak düşünün.

İlgili konular