Facebook'da paylaşım yaparken kimlerin görebileceğini seçebiliyorsunuz(friends, only me, public, custom, close friends). Şuan üzerinde çalıştığım projede facebook daki gibi paylaşımı görebilecek kişileri kullanıcının seçimine bırakmam gerekiyor. Veritabanı yapımın nasıl olmasını önerirsiniz? Veya inceleyebileceğim link atabilir misiniz?

soruldu: 13 Oca '13, 05:18

alexander's gravatar image

alexander
185172023
cevap kabul oranı: 33%

değiştirildi: 19 Mar '13, 11:27

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

-2

MVC mimarisi kullanmalısınız.

(13 Oca '13, 13:55) MDemir MDemir's gravatar image
2

Sorduğum soruyla verdiğiniz cevap arasında bir bağlantı kuramadım.

(15 Oca '13, 01:46) alexander alexander's gravatar image

Ben şöyle bir yapı düşündüm.

Aktivite türleri

**activity_types**
    activity_type_id
    activity_type_code(içerik paylaşımı, arkadaş olma, yorum yapma vs...)
    activity_name

Bütün aktiviteleri tutan tablo

**activities**
    activity_id
    activity_type_id
    user_id(aktiviteyi gerçekleştiren)
    object_id(içerik paylaşma ise icerik id, yorum ise yorum id , vs...)
    activity_time
    activity_data(ilgili objenin veritabanından çekerek bu alana serialize edip basıyoruz)

Bu tabloda aktiviteleri görüntüleyebilecek kullanıcılar tutan tablo

**activities_visible_users**
    activity_id
    user_id(gören kişinin id si)
    is_notify(bildirim ise 1, değilse 0 değerini alır)
    is_unread(okumadıysa 1, okuduysa 0 değerini alır)

örneğin 10 id li bir kullanıcının göreceği aktiviteleri getiren sorgu

SELECT * FROM acitivities A
INNER JOIN activity_visible_users B ON A.activity_id=B.activity_id AND B.user_id='10'
INNER JOIN activity_types C ON A.activity_type_id=C.activity_type_id

örneğin 10 id li bir kullanıcının bildirimlerini getiren sorgu

SELECT * FROM acitivities A
INNER JOIN activity_visible_users B ON A.activity_id=B.activity_id AND B.user_id='10' AND B.is_notify='1'
INNER JOIN activity_types C ON A.activity_type_id=C.activity_type_id

Araştırmalarımdan sonra kafamda böyle bir yapı oluştu. Fakat hala eksik birşeyler var gibime geliyor.

GÜNCELLEME

Belirtmeyi unutmuşum activities visible users tablosundaki user id gören kişinin id si. Zaten activities tablosunda olayı gerçekleştirenin id si var ekstradan activities visible users tablosunda da tutmaya gerek yok. public olduğunda şöyle birşey yapılabilir. activities tablosunda is_public adında bir alan ekleyip sorugu tekrardan şu şekilde düzenlenebilir.

SELECT * FROM acitivities A 
LEFT JOIN activity_visible_users B ON A.activity_id=B.activity_id 
INNER JOIN activity_types C ON A.activity_type_id=C.activity_type_id 
WHERE B.user_id='10' OR A.is_public='1'

Bildirim sorgusunu değiştirmeye gerek yok bildirim için her türlü bildirim gidecek olan kullanıcıların activities visible users tablosuna kaydı atılacak

(15 Oca '13, 06:42) alexander alexander's gravatar image

Bence "activities_visible_users" tablosunda hem aktiviteyi gerçekleştiren, hem de aktiviyeyi görünteleyebilecek olanların id'si bulunmalı. Ayrıca, örneğin "public" olan bir paylaşımı nerede tutacaksınız? "activities_visible_users" tablosunda tutacaksanız select sorgusunda bu şartları da belirtmelisiniz.

(15 Oca '13, 08:25) mhkoca60 mhkoca60's gravatar image

evet activities_visible_users tablosu aktiviteyi göreceklerin id sini de tutmalı. public paylaşım için de bu tabloya herkesin id sini eklemek gerekecek gibi geliyor.

(15 Oca '13, 08:52) numankaraaslan numankaraaslan's gravatar image

Belirtmeyi unutmuşum activities_visible_users tablosundaki user_id gören kişinin id si. Zaten activities tablosunda olayı gerçekleştirenin id si var ekstradan activities_visible_users tablosunda da tutmaya gerek yok. public olduğunda şöyle birşey yapılabilir. activities tablosunda is_public adında bir alan ekleyip sorugu tekrardan şu şekilde düzenlenebilir.

SELECT * FROM acitivities A LEFT JOIN activity_visible_users B ON A.activity_id=B.activity_id INNER JOIN activity_types C ON A.activity_type_id=C.activity_type_id WHERE B.user_id='10' OR A.is_public='1'

(15 Oca '13, 09:07) alexander alexander's gravatar image

Bildirim sorgusunu değiştirmeye gerek yok bildirim için her türlü bildirim gidecek olan kullanıcıların activities_visible_users tablosuna kaydı atılacak

(15 Oca '13, 09:08) alexander alexander's gravatar image

Facebook tarzı dediğiniz için, paylaşanın da, görenin de id'sinin activities_visible_users tablosunda bulunması gerektiğini düşünüyorum.

(15 Oca '13, 09:17) mhkoca60 mhkoca60's gravatar image

paylaşanın id sini activities_visible_users tablosunda bulunmasının ne gibi bir avantajı olabilir ?

(15 Oca '13, 09:29) alexander alexander's gravatar image

Başta, ekrana yansıtırken göstermek için, hazır aynı tablo üzerinden select edilmeli diye düşündüm ama bu haliyle de join yapıldığı esnada A tablosundan direkt çekilebilir.

(15 Oca '13, 09:45) mhkoca60 mhkoca60's gravatar image
10 yorumdan 5 tanesi gösteriliyor hepsini göster

Muhtemelen paylaşım yapılan nesneyle ilgili bir tablonuz vardır. ilk akla gelen; bu tabloya 'gorecekler' gibi bir alan ekleyip ornegin kendisi icin 1, arkadaşlar için 2, public için 3 vs. bir değer set ederek, sayfaları bu değere göre render edebilirsiniz. Eğer facebook tarzı bir siteyse aynı şeyi duvar öğelerine de uygulayabilirsiniz.

permanent link

cevaplandı: 13 Oca '13, 08:42

mhkoca60's gravatar image

mhkoca60
1.8k264554
cevap kabul oranı: 15%

Facebook'da özel olarak göstermek istediğimiz kullanıcıları da seçebiliyoruz. Örneğin ben paylaştığım nesneyi x,y,z kişileri görsün diyebiliyorum. Bunun için nasıl bir tablo yapısı geliştirmeliyim.

(13 Oca '13, 09:25) alexander alexander's gravatar image

Yeni bir tablo belki iş görebilir. Bu tablo foreign key ler ile ilişkileri tutar. Ör:

Paylasim_id: paylaşılan içeriğin id'si.

Goren_id: public, all friends vs. veya özel olak seçilen kişinin id'si.

Belki bir fikir verir.

(13 Oca '13, 10:49) mhkoca60 mhkoca60's gravatar image

paylasim_id, goren_id 'nin yanı sıra tabiki paylasan_id de olmalı :)

(14 Oca '13, 01:30) mhkoca60 mhkoca60's gravatar image

söylediklerinizin üzerinde kafa yoracağım teşekkür ederim.

(15 Oca '13, 01:59) alexander alexander's gravatar image

tam olarak içinden çıkamadım ama şöyle tavsiye edebilirim. users tablosu düşünün kişilerin olduğu normal bi tablo. sonra close_friends, relatives falan gibi tablolar düşünün foreign key ile users tablosundan user id ve arkadaş id alınıp doldurulur. paylaşım tablosu düşünün. paylaşım id ve foreign user id olacak. son olarak da visible tablosu düşünün paylaşım id ve görecek kişinin user id si şeklinde. close friends dediği zaman o tablodaki karşılık gelen veriler otomatik olarak visible tablosuna aktarılır falan. tabi veri tekrarları olacak belki daha da optimize edilebilir.

permanent link

cevaplandı: 15 Oca '13, 02:06

numankaraaslan's gravatar image

numankaraaslan
1.8k253749
cevap kabul oranı: 19%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×66
×19

Soruldu: 13 Oca '13, 05:18

Görüntüleme: 1,180 kez

Son güncelleme: 19 Mar '13, 11:27

powered by BitNami OSQA